# coding: utf8


exception_tree_doc = \
    """
    BaseException						
     ├── SystemExit
     ├── KeyboardInterrupt
     ├── GeneratorExit
     └── Exception
          ├── StopIteration
          ├── StopAsyncIteration
          ├── ArithmeticError
          │    ├── FloatingPointError
          │    ├── OverflowError
          │    └── ZeroDivisionError
          ├── AssertionError
          ├── AttributeError
          ├── BufferError
          ├── EOFError
          ├── ImportError
          │    └── ModuleNotFoundError
          ├── LookupError
          │    ├── IndexError
          │    └── KeyError
          ├── MemoryError
          ├── NameError
          │    └── UnboundLocalError
          ├── OSError
          │    ├── BlockingIOError
          │    ├── ChildProcessError
          │    ├── ConnectionError
          │    │    ├── BrokenPipeError
          │    │    ├── ConnectionAbortedError
          │    │    ├── ConnectionRefusedError
          │    │    └── ConnectionResetError
          │    ├── FileExistsError
          │    ├── FileNotFoundError
          │    ├── InterruptedError
          │    ├── IsADirectoryError
          │    ├── NotADirectoryError
          │    ├── PermissionError
          │    ├── ProcessLookupError
          │    └── TimeoutError
          ├── ReferenceError
          ├── RuntimeError
          │    ├── NotImplementedError
          │    └── RecursionError
          ├── SyntaxError
          │    └── IndentationError
          │         └── TabError
          ├── SystemError
          ├── TypeError
          ├── ValueError
          │    └── UnicodeError
          │         ├── UnicodeDecodeError
          │         ├── UnicodeEncodeError
          │         └── UnicodeTranslateError
          └── Warning
               ├── DeprecationWarning
               ├── PendingDeprecationWarning
               ├── RuntimeWarning
               ├── SyntaxWarning
               ├── UserWarning
               ├── FutureWarning
               ├── ImportWarning
               ├── UnicodeWarning
               ├── BytesWarning
               └── ResourceWarning
"""


def get_exception_tree(key=None):
    if not isinstance(key, str):
        return exception_tree_doc
    key = key.title()
    sub_tree = ''
    get_line = False
    get_pos = 0
    for line in exception_tree_doc.split('\n'):
        if not get_line:
            if key in line:
                get_pos = line.find(key)
                if ord(line[get_pos-2]) > 1000:
                    get_line = True
        else:
            if len(line) == 0 or (64 < ord(line[get_pos]) < 255):
                break
        if get_line:
            sub_tree += line[get_pos:] + '\n'
    return sub_tree


class Node:

    def __init__(self, node=None, childs=()):
        self.node = node
        self.childs = list(childs)
        self.data = None


class ExceptionTree:

    def __init__(self):
        self.tree = self.get_subtree()

    def get_subtree(self, exception=None):
        if not exception:
            return exception_tree_doc

        if exception not in exception_tree_doc:
            return "invalid Exception name: {}".format(exception)

        lines = ''
        pos = 0
        start = 0
        next = 1
        exception_list = exception_tree_doc.split('\n')[1:-1]
        for j, line in enumerate(exception_list):
            if exception in line:
                pos = line.find(exception)
                lines += line[pos+1:]
                start = 1
            if start:
                if line[pos:pos+1] == '├':
                    lines += line[pos+1:]
                if line[pos:pos+1] == '└':
                    if j == len(exception_list)-1:
                        pass
                    else:
                        pass

        return lines





